﻿#ifndef MYCAMMERWIDGET_H
#define MYCAMMERWIDGET_H

#define DEFAULT_FPS 80

#include <QApplication>
#include <QWidget>
#include <QThread>
#include "GenICam/System.h"
#include "GenICam/StreamSource.h"
#include "GenICam/Frame.h"
#include "Media/ImageConvert.h"

#include "AcquisitionMode.h"
#include "cFrameInfo.h"
#include "cframeinfolist.h"
#include "getframethread.h"
#include "displayframethread.h"
#include <list>

QT_BEGIN_NAMESPACE
namespace Ui { class MyCammerWidget; }
QT_END_NAMESPACE

using namespace std;
using namespace Dahua::GenICam;
using namespace Dahua::Infra;

class MyCammerWidget : public QWidget
{
    Q_OBJECT

public:
    MyCammerWidget(QWidget *parent = nullptr);
    ~MyCammerWidget();

    //设置当前相机
    void SetCamera(const QString& strKey);
    //切换采集方式
    bool CameraChangeAcquisitionMode(AcquisitionMode acquisitionMode);
    //打开相机
    bool CameraOpen();
    //关闭相机
    bool CameraClose();
    //开始采集
    bool CameraStart();
    //停止采集
    bool CameraStop();
    //帧率设置函数
    void FPSSet(int fps);

    // 窗口关闭响应函数
    void closeEvent(QCloseEvent * event);

private:
    Ui::MyCammerWidget *ui;

    //当前采集方式
    AcquisitionMode currentAcquisitionMode;

    //相机和流
    ICameraPtr m_CameraPtr;							//当前相机指针
    IStreamSourcePtr m_StreamSPtr;				    //流对象指针
    TVector<ICameraPtr> vCameraPtrList;             //相机列表

    //图像获取和显示线程
    GetFrameThread *getThread; //抓图线程
    QThread *thread1;

    DisplayFrameThread *displayThread; //显示线程
    QThread *thread2;

    void stopMyThread(); //退出线程函数

    //图片信息缓冲列表对象
    CFrameInfolist m_cFrameInfolist;

private slots:
    // 显示一帧图像
    bool ShowImage(uint8_t* pRgbFrameBuf, int nWidth, int nHeight, uint64_t nPixelFormat);

signals:
    //显示帧率设置信号
    void signalDisplayFPSSet(int FPS);
};
#endif // MYCAMMERWIDGET_H
